
/* 定义response对象的data接口 */

import axios, { type AxiosResponse, type AxiosRequestConfig, type InternalAxiosRequestConfig } from 'axios';
import { showLoadingToast } from 'vant';
// import pinia from '../stores/index';
/* 定义response对象的data接口 */
interface ResponseData<T> {
    ret: number;
    code:number;
    data: T;
    message: string;
}
// 配置新建一个 axios 实例
const service = axios.create({
    baseURL: '/api',
    timeout: 5000,
});

// 添加请求拦截器
service.interceptors.request.use(
    (config: InternalAxiosRequestConfig<any>) => {
         // document.cookie = "1&_toekn=489390251&9A7A7F60240NE37ACF486EE2C1C6120D4F597C3BD95B1FC58EA692E7B13B1132F61CE8C6FDC3126ME7F8274D2AC4E8B_";

        // const userInfoStore = useUserInfoStore()
        // let token = userInfoStore.token
        // if (token) {
        //     (config.headers as AxiosRequestHeaders).token = token
        // }


        showLoadingToast({
            message: '加载中~~~',
            forbidClick: true,
        });
        return config;
    }
);

// 添加响应拦截器
service.interceptors.response.use(
    
    /* 约束一下response */
    async (response: AxiosResponse<ResponseData<any>>) => {

        // 对响应数据做点什么
        const res = response.data; // res现在拿到的是响应体,也就是后端返回的数据

        // 对错误的统一处理
        if(!!res.ret == false && !!res.code == false){
            return res.data

        } else if ((res.ret !== 20000 && res.ret !== 200) && (res.code !== 0)&&(res.ret!==0)) { 
        // response 是所有的响应信息
        // response -> {
        //   config -> 配置信息
        //   data -> 响应体(后端返回给我们的数据)
        //   headers -> 响应头
        //   request -> 请求示例(XMLHttpRequest实例)
        //   status -> 响应状态码
        //   statusText -> 响应状态文本
        // }

        // 对响应数据做点什么
        const res = response.data; // res现在拿到的是响应体,也就是后端返回的数据
        
        // res -> {
        //   code
        //   data
        //   message
        //   success
        // }

        // 对错误的统一处理        
            // 统一的错误提示
            // ElMessage({
            //     message: (typeof res.data == 'string' && res.data) || res.message || 'Error',
            //     type: 'error',
            //     duration: 5 * 1000
            // })
            
            // `token` 过期或者账号已在别处登录
            // if (response.status === 401) {
            //     // const storeUserInfo = useUserInfoStore(pinia)
            //     // await storeUserInfo.reset()
            //     window.location.href = '/' // 去登录页
            //     // ElMessageBox.alert('你已被登出，请重新登录', '提示', {})
            //     //     .then(() => { })
            //     //     .catch(() => { })
            // }
            return Promise.reject(service.interceptors.response);
        } else {
            
            return res.data; /* 返回成功响应数据中的data属性数据 */
        }
    }
)
export default service;
